package algotithm.leetcode.bit.test1404;

/**
 * @author zhouyanxiang
 * @Date 2021-02-2021/2/3-22:23
 * @Title 1404. 将二进制表示减到 1 的步骤数
 */
public class Solution {

    public static void main(String[] args) {
        String s = "1101";
        Solution solution = new Solution();
        int numSteps = solution.numSteps(s);
        System.out.println(numSteps);
    }

    public int numSteps(String s) {
        char[] c = s.toCharArray();
        int res = 0;
        // 用来标志是否需要进位
        boolean flag = false;
        for (int i = c.length - 1; i > 0; i--) {
            // 如果倒数第一位需要往倒数第二位进位
            if (flag) {
                if (c[i] == '0') {
                    res++;
                }
            } else {
                if (c[i] != '0') {
                    res++;
                    flag = true;
                }
            }
            // 统一的偶数之后需要计算的
            res++;
        }
        // 判断原字符串的第一位是否需要进位
        if (flag) {
            res++;
        }
        return res;
    }

}
